package cn.learn.designpattern.observer;


/**
 * 观察者模式，又教订阅发布模式
 * <p>
 * 主题（目标）
 *
 * @author huangyezhan
 * @date 2018/11/24-1:15
 */
public interface Subject {

    /**
     * 注册观察者角色
     *
     * @param o 观察者
     */
    void registerObserver(Observer o);

    /**
     * 移除观察者角色
     *
     * @param o 观察者
     */
    void removedObserver(Observer o);

    /**
     * 通知所有注册的观察者对象
     */
    void notifyObservers();

}


/**
 * 观察者对象
 *
 * @author huangyezhan
 * @date 2018/11/24-1:27
 */
interface Observer {

    /**
     * 主题通发生变化通知观察者
     *
     * @param temperature 温度
     * @param humidity    湿度
     * @param pressure    气压
     */
    void update(float temperature, float humidity, float pressure);

}

